package com.zjkj.mp.utils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class PaginatedResult implements Serializable {

	/**  */
	private static final long serialVersionUID = 8769220848020035334L;
	private int currPage = 0;
	private int pageSize = 20;
	private int totalSize = 0;
	private Object result = null;

	/**
	 * 初始化 <code>PaginatedResult</code> 新实例。
	 */
	public PaginatedResult() {

	}

	/**
	 * 使用指定的页号和页大小初始化 <code>PaginatedResult</code> 新实例。
	 * 
	 * @param currPage
	 *            当前页号。
	 * @param pageSize
	 *            每页的大小。
	 */
	public PaginatedResult(int currPage, int pageSize) {
		if (currPage < 1)
			currPage = 1;

		if (pageSize < 1)
			pageSize = 20;

		this.currPage = currPage;
		this.pageSize = pageSize;
	}

	/**
	 * 获得当前页号。
	 * 
	 * @return int
	 */
	public int getCurrPage() {
		return currPage;
	}

	/**
	 * 获得上一页号
	 * 
	 * @return int
	 */
	public int getPreviousPage() {
		int pageNo = currPage - 1;
		if(pageNo <= 0) return 1;
		return pageNo;
	}

	/**
	 * 获得下一页号
	 * 
	 * @return int
	 */
	public int getNextPage() {
		int pageNo = currPage + 1;
		if(pageNo > this.getPageCount()) return this.getPageCount();
		return pageNo;
	}

	/**
	 * 设置当前页号。
	 * 
	 * @param currPage
	 */
	public void setCurrPage(int currPage) {
		if (currPage < 1)
			currPage = 1;

		this.currPage = currPage;
	}

	/**
	 * 获得每页的大小。
	 * 
	 * @return int
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 设置每页的大小。
	 * 
	 * @param pageSize
	 */
	public void setPageSize(int pageSize) {
		if (pageSize < 1)
			pageSize = 20;

		this.pageSize = pageSize;
	}

	/**
	 * 获得查询的起始位置。
	 * 
	 * 查询使用的区间方式未[StartPosition,EndPosition)。
	 * 
	 * @return int
	 */
	public int getStartPosition() {
		return (this.currPage - 1) * this.pageSize;
	}

	/**
	 * 获得查询的结束位置。
	 * 
	 * @return int
	 */
	public int getEndPosition() {
		return this.currPage * this.pageSize;
	}

	/**
	 * 获得查询结果的总页数。
	 * 
	 * @return int
	 */
	public int getPageCount() {
		return (totalSize + pageSize - 1) / pageSize;
	}

	/**
	 * 获得查询结果的总行数。
	 * 
	 * @return int
	 */
	public int getTotalSize() {
		return totalSize;
	}

	/**
	 * 设置查询结果的总行数。
	 * 
	 * @param totalSize
	 */
	public void setTotalSize(int totalSize) {
		if (totalSize < 0)
			totalSize = 0;

		this.totalSize = totalSize;
	}

	/**
	 * 获得当前页的结果。
	 * 
	 * @return Object
	 */
	public Object getResult() {
		return result;
	}

	/**
	 * 设置当前页的结果。
	 * 
	 * @param result
	 */
	public void setResult(Object result) {
		if (result instanceof List) {
			if (result instanceof ArrayList) {
				this.result = result;
			} else {
				ArrayList bakList = new ArrayList();
				bakList.addAll((List) result);
				this.result = bakList;
			}
		} else {
			this.result = result;
		}
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.append("PageSize", this.pageSize)
				.append("CurrPage", this.currPage)
				.append("TotalSize", this.totalSize)
				.append("Result", this.result).toString();
	}

}

/**
 * Copyright © 2013,指尖科技 All rights reserved.
 */
